// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Library General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA


#include "partida.h"

void Partida::PrepararMenuBox()
{
	selbox->GetElemByID("label_equipo")->SetText("Equipo" + equipo_que_lanza->GetColor());
	if (equipo_que_lanza->GetColor() == "rojo")
		selbox->GetElemByID("label_equipo")->SetImage(_imgRedTeam, 250, 136, IMG_ALIGN_ABOVE);
	else
		selbox->GetElemByID("label_equipo")->SetImage(_imgBlueTeam, 250, 136, IMG_ALIGN_ABOVE);
	
	if (equipo_que_lanza->MeQuedanBolas(1))
		selbox->GetContByID("seleccionar_box_1")->SetVisible(1);
	else selbox->GetContByID("seleccionar_box_1")->SetVisible(0);
	if (equipo_que_lanza->MeQuedanBolas(2))
		selbox->GetContByID("seleccionar_box_2")->SetVisible(1);
	else 
		selbox->GetContByID("seleccionar_box_2")->SetVisible(0);
	if (equipo_que_lanza->MeQuedanBolas(3))
		selbox->GetContByID("seleccionar_box_3")->SetVisible(1);
	else selbox->GetContByID("seleccionar_box_3")->SetVisible(0);
	if (equipo_que_lanza->MeQuedanBolas(4))
		selbox->GetContByID("seleccionar_box_4")->SetVisible(1);
	else selbox->GetContByID("seleccionar_box_4")->SetVisible(0);
	if (equipo_que_lanza->MeQuedanBolas(5))
		selbox->GetContByID("seleccionar_box_5")->SetVisible(1);
	else selbox->GetContByID("seleccionar_box_5")->SetVisible(0);
	if (equipo_que_lanza->MeQuedanBolas(6))
		selbox->GetContByID("seleccionar_box_6")->SetVisible(1);
	else selbox->GetContByID("seleccionar_box_6")->SetVisible(0);

	selbox->EstablecerEnlaces();
	selbox->SeleccionarDefecto();
}

void Partida::PrepararMenuBola()
{
	selbola->GetElemByID("label_equipo")->SetText("Equipo " + equipo_que_lanza->GetColor());
	GLuint img = equipo_que_lanza->GetBoxSeleccionado();

	selbola->GetElemByID("label_equipo")->SetImage(_imgBox[img], 150, 150, IMG_ALIGN_ABOVE);

	if (equipo_que_lanza->MeQuedanBolasBlandas())
		selbola->GetContByID("seleccionar_bola_blanda")->SetVisible(1);
	else selbola->GetContByID("seleccionar_bola_blanda")->SetVisible(0);
	if (equipo_que_lanza->MeQuedanBolasSemi())
		selbola->GetContByID("seleccionar_bola_semi")->SetVisible(1);
	else selbola->GetContByID("seleccionar_bola_semi")->SetVisible(0);
	if (equipo_que_lanza->MeQuedanBolasDuras())
		selbola->GetContByID("seleccionar_bola_dura")->SetVisible(1);
	else selbola->GetContByID("seleccionar_bola_dura")->SetVisible(0);

	selbola->EstablecerEnlaces();
	selbola->SeleccionarDefecto();

}

void Partida::PrepararMenuPartida()
{
	// Ha de llamarse con el menú activo already.

	switch (juego_actual.nroJugadores)
	{
		case 2:
			menu->GetContByID("boton_bolas_box1")->SetVisible(0);
			menu->GetContByID("cont_1_restantes")->SetVisible(0);
			
			menu->GetContByID("boton_bolas_box2")->SetVisible(0);
			menu->GetContByID("cont_2_restantes")->SetVisible(0);
			
			menu->GetContByID("boton_bolas_box3")->SetVisible(1);
			menu->GetContByID("cont_3_restantes")->SetVisible(1);
			
			menu->GetContByID("boton_bolas_box4")->SetVisible(1);
			menu->GetContByID("cont_4_restantes")->SetVisible(1);
			
			menu->GetContByID("boton_bolas_box5")->SetVisible(0);
			menu->GetContByID("cont_5_restantes")->SetVisible(0);
			
			menu->GetContByID("boton_bolas_box6")->SetVisible(0);
			menu->GetContByID("cont_6_restantes")->SetVisible(0);
			break;
		case 6:
			menu->GetContByID("boton_bolas_box1")->SetVisible(1);
			menu->GetContByID("cont_1_restantes")->SetVisible(1);
			
			menu->GetContByID("boton_bolas_box2")->SetVisible(1);
			menu->GetContByID("cont_2_restantes")->SetVisible(1);
			
			menu->GetContByID("boton_bolas_box3")->SetVisible(1);
			menu->GetContByID("cont_3_restantes")->SetVisible(1);
			
			menu->GetContByID("boton_bolas_box4")->SetVisible(1);
			menu->GetContByID("cont_4_restantes")->SetVisible(1);
			
			menu->GetContByID("boton_bolas_box5")->SetVisible(1);
			menu->GetContByID("cont_5_restantes")->SetVisible(1);
			
			menu->GetContByID("boton_bolas_box6")->SetVisible(1);
			menu->GetContByID("cont_6_restantes")->SetVisible(1);
			break;
	}
	
	menu->EstablecerEnlaces();
	menu->SeleccionarDefecto();
}

void Partida::PrepararMenuPartidaBola()
{
	menu->GetElemByID("box_seleccionado")->SetImage(_imgBox[_boxActivoMenu-1], 100, 100, IMG_ALIGN_ABOVE);
}

void Partida::PrepararMenuEsperaParcial(int desempate)
{
	float negro[3] = {0.0, 0.0, 0.0};
	float blanco[3] ={1.0, 1.0, 1.0};
	float azul[3] = {0.0, 0.0, 1.0};
	float rojo[3] ={1.0, 0.0, 0.0};

	// Parciales van de 0 a nroParciales-1 (array), por eso se suma uno para añadir
	espera_parcial->GetElemByID("parcial_finalizado")->SetText(juego_actual.parcialActual);
	espera_parcial->GetElemByID("parcial_comenzando")->SetText(juego_actual.parcialActual+1);

	// Para las puntuaciones estaremos bien restando uno.
	char puntuacion[2];
	std::string punt = "EQUIPO ROJO: ";
	sprintf(puntuacion, "%i", juego_actual.parcial[juego_actual.parcialActual-1].punt.rojo);
	punt += puntuacion;
	
	espera_parcial->GetElemByID("puntuacion_parcial_rojo")->SetText(
					punt
					);

	punt = "EQUIPO AZUL: ";
	sprintf(puntuacion, "%i", juego_actual.parcial[juego_actual.parcialActual-1].punt.azul);
	punt += puntuacion;
	espera_parcial->GetElemByID("puntuacion_parcial_azul")->SetText(
					punt
					);

	punt = "EQUIPO ROJO: ";
	sprintf(puntuacion, "%i", juego_actual.punt.rojo);
	punt += puntuacion;
	espera_parcial->GetElemByID("puntuacion_total_rojo")->SetText(
					punt
					);
	
	punt = "EQUIPO AZUL: ";
	sprintf(puntuacion, "%i", juego_actual.punt.azul);
	punt += puntuacion;
	espera_parcial->GetElemByID("puntuacion_total_azul")->SetText(
					punt
					);

	if (juego_actual.parcial[juego_actual.parcialActual-1].punt.azul > 
					juego_actual.parcial[juego_actual.parcialActual-1].punt.rojo)
	{
		espera_parcial->GetElemByID("ganador")->SetText("EQUIPO AZUL");
		espera_parcial->GetElemByID("ganador")->SetFGColor(azul);
	}
	else if (juego_actual.parcial[juego_actual.parcialActual-1].punt.azul < 
					juego_actual.parcial[juego_actual.parcialActual-1].punt.rojo)
	{
		espera_parcial->GetElemByID("ganador")->SetText("EQUIPO ROJO");
		espera_parcial->GetElemByID("ganador")->SetFGColor(rojo);
	}
	else
	{
		espera_parcial->GetElemByID("ganador")->SetText("Ninguno puntúa");
		espera_parcial->GetElemByID("ganador")->SetFGColor(negro);
	}

	espera_parcial->GetContByID("desempate")->SetVisible(desempate);
}

void Partida::PrepararMenuEsperaFinal()
{
	float negro[3] = {0.0, 0.0, 0.0};
	float blanco[3] ={1.0, 1.0, 1.0};
	float azul[3] = {0.0, 0.0, 1.0};
	float rojo[3] ={1.0, 0.0, 0.0};

	espera_final->GetElemByID("nro_parciales")->SetText(juego_actual.nroParciales);

	char *mensaje;
	std::string punt = "EQUIPO ROJO:     ";
	std::string sep = "     ";
	for (int i = 0; i < juego_actual.nroParciales; i++)
	{
		mensaje = new char[10];
		sprintf(mensaje, "%i", juego_actual.parcial[i].punt.rojo);
		punt += mensaje + sep;
		free (mensaje);
	}
	
	espera_final->GetElemByID("puntuacion_parcial_rojo")->SetText(
					punt
					);

	punt = "EQUIPO AZUL:     ";
	for (int i = 0; i < juego_actual.nroParciales; i++)
	{
		mensaje = new char[10];
		sprintf(mensaje, "%i", juego_actual.parcial[i].punt.azul);
		punt += mensaje + sep;
		free (mensaje);
	}
	espera_final->GetElemByID("puntuacion_parcial_azul")->SetText(
					punt
					);

	if (juego_actual.punt.azul > 
					juego_actual.punt.rojo)
	{
		espera_final->GetElemByID("ganador")->SetImage(_imgBlueTeam, 250, 136, IMG_ALIGN_LEFT);
		espera_final->GetElemByID("ganador")->SetFGColor(azul);
	}
	else
	{   
		espera_final->GetElemByID("ganador")->SetImage(_imgRedTeam, 250, 136, IMG_ALIGN_LEFT);
		espera_final->GetElemByID("ganador")->SetFGColor(rojo);
	}

	punt = "EQUIPO ROJO: ";
	mensaje = new char[10];
	sprintf(mensaje, "%i", juego_actual.punt.rojo);
	punt += mensaje;
	espera_final->GetElemByID("puntuacion_total_rojo")->SetText(
					punt
					);
	free (mensaje);

	punt = "EQUIPO AZUL: ";
	mensaje = new char[10];
	sprintf(mensaje, "%i", juego_actual.punt.azul);
	punt += mensaje;
	espera_final->GetElemByID("puntuacion_total_azul")->SetText(
					punt
					);
	free (mensaje);
	
}



void Partida::ActualizaValoresEntrada()
{
	if (menu->GetID() == "sub_jue_box")
	{
		switch (juego_actual.nroJugadores)
		{
		case 6:
			menu->GetElemByID("cont_1_restantes")->SetText(control_entrada.box1[3]);

			menu->GetElemByID("cont_2_restantes")->SetText(control_entrada.box2[3]);

			menu->GetElemByID("cont_5_restantes")->SetText(control_entrada.box5[3]);

			menu->GetElemByID("cont_6_restantes")->SetText(control_entrada.box6[3]);

		case 2:
			menu->GetElemByID("cont_3_restantes")->SetText(control_entrada.box3[3]);

			menu->GetElemByID("cont_4_restantes")->SetText(control_entrada.box4[3]);
			break;
		}
	}
	else
	{
		int box[4];
		switch (_boxActivoMenu)
		{
			case 1:
				for (int i = 0; i < 4; i++)
					box[i] = control_entrada.box1[i];
				break;
			case 2:
				for (int i = 0; i < 4; i++)
					box[i] = control_entrada.box2[i];
				break;
			case 3:
				for (int i = 0; i < 4; i++)
					box[i] = control_entrada.box3[i];
				break;
			case 4:
				for (int i = 0; i < 4; i++)
					box[i] = control_entrada.box4[i];
				break;
			case 5:
				for (int i = 0; i < 4; i++)
					box[i] = control_entrada.box5[i];
				break;
			case 6:
				for (int i = 0; i < 4; i++)
					box[i] = control_entrada.box6[i];
				break;
		}
		
			menu->GetElemByID("cont_blandas_llevas")->SetText(box[0]);
			menu->GetElemByID("cont_semis_llevas")->SetText(box[1]);
			menu->GetElemByID("cont_duras_llevas")->SetText(box[2]);
			menu->GetElemByID("cont_restantes")->SetText(box[3]);
	}
}